package inge_soft.gestoriusNuevo.persistence.entity.implementation;

import java.io.Serializable;
import java.util.Date;

import inge_soft.gestoriusNuevo.persistence.entity.abstraction.Entidad;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.persistence.UniqueConstraint;

@Entity
@Table(name = "ACTIVIDADES", uniqueConstraints=
@UniqueConstraint(columnNames={"evento_id","nombre"}))
public class Actividad implements Entidad, Serializable {

	private static final long serialVersionUID = -4739603864957674411L;

	/* REVISAR NULLABLES */
	
	@Id
	@GeneratedValue(strategy = GenerationType.AUTO)
	private Long id;
	
	@ManyToOne
	@JoinColumn(name="evento_id")
	private Evento evento;
	
	@ManyToOne
	@JoinColumn(name="estado_id")
	private Estado estado;
	
	@ManyToOne
	@JoinColumn(name="tipo_actividad_id")
	private TipoActividad tipoActividad;
	
	@Column(name = "nombre", nullable = false)
	private String nombre;
	
	@Temporal(TemporalType.DATE)
	@Column(name = "fechaInicio", nullable = false)
	private Date fechaInicio;
	
	@Temporal(TemporalType.DATE)
	@Column(name = "fechaFin", nullable = false)
	private Date fechaFin;
	
	@Column(name = "docente", nullable = false)
	private String docente;
	
	@Column(name = "temario", nullable = false)
	private String temario;
	
	@Column(name = "descripcion", nullable = false)
	private String descripcion;
	
	@Column(name = "asistencia", nullable = false)
	private boolean asistencia;
	
	@Column(name = "evaluacion", nullable = false)
	private boolean evaluacion;
	
	@Column(name = "cupo")
	private Integer cupo;
	
	@Column(name = "preinscripcion", nullable = false)
	private boolean preinscripcion;
	
	@Column(name = "condicionIngreso", nullable = false)
	private boolean condicionIngreso;

	public Actividad() {}
	
	public Long getId() {
		return id;
	}

	public void setId(Long id) {
		this.id = id;
	}

	public Estado getEstado() {
		return estado;
	}

	public void setEstado(Estado estado) {
		this.estado = estado;
	}

	public Evento getEvento() {
		return evento;
	}

	public void setEvento(Evento evento) {
		this.evento = evento;
	}

	public TipoActividad getTipoActividad() {
		return tipoActividad;
	}

	public void setTipoActividad(TipoActividad tipoActividad) {
		this.tipoActividad = tipoActividad;
	}

	public String getNombre() {
		return nombre;
	}

	public void setNombre(String nombre) {
		this.nombre = nombre;
	}

	public Date getFechaInicio() {
		return fechaInicio;
	}

	public void setFechaInicio(Date fechaInicio) {
		this.fechaInicio = fechaInicio;
	}

	public Date getFechaFin() {
		return fechaFin;
	}

	public void setFechaFin(Date fechaFin) {
		this.fechaFin = fechaFin;
	}

	public String getDocente() {
		return docente;
	}

	public void setDocente(String docente) {
		this.docente = docente;
	}

	public String getTemario() {
		return temario;
	}

	public void setTemario(String temario) {
		this.temario = temario;
	}

	public String getDescripcion() {
		return descripcion;
	}

	public void setDescripcion(String descripcion) {
		this.descripcion = descripcion;
	}

	public boolean getAsistencia() {
		return asistencia;
	}

	public void setAsistencia(boolean asistencia) {
		this.asistencia = asistencia;
	}

	public boolean getEvaluacion() {
		return evaluacion;
	}

	public void setEvaluacion(boolean evaluacion) {
		this.evaluacion = evaluacion;
	}

	public Integer getCupo() {
		return cupo;
	}

	public void setCupo(Integer cupo) {
		this.cupo = cupo;
	}

	public boolean getPreinscripcion() {
		return preinscripcion;
	}

	public void setPreinscripcion(boolean preinscripcion) {
		this.preinscripcion = preinscripcion;
	}

	public boolean getCondicionIngreso() {
		return condicionIngreso;
	}

	public void setCondicionIngreso(boolean condicionIngreso) {
		this.condicionIngreso = condicionIngreso;
	}

	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + ((id == null) ? 0 : id.hashCode());
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Actividad other = (Actividad) obj;
		if (id == null) {
			if (other.id != null)
				return false;
		} else if (!id.equals(other.id))
			return false;
		return true;
	}

	@Override
	public String toString() {
		return "Cambiar toString de Actividad si es necesario";
	}
	
	
}
